#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 5
#define ERROR -1
typedef enum {false, true} bool;
typedef int ElementType;
typedef int Position;
typedef struct LNode* List;
struct LNode {
    ElementType Data[MAXSIZE];
    Position Last; /* 保存线性表中最后一个元素的位置 */
};

List MakeEmpty();
Position Find( List L, ElementType X );
bool Insert( List L, ElementType X, Position P );
bool Delete( List L, Position P );
void printArrayList(List L);

//
//int main()
//{
//    List L;
//    ElementType X;
//    Position P;
//    int N;
//
//    L = MakeEmpty();
//    scanf("%d", &N);
//    while ( N-- ) {
//        scanf("%d", &X);
//        if (Insert(L, X, 0)==false )
//            printf(" Insertion Error: %d is not in.\n", X);
//    }
//    scanf("%d", &N);
//    while ( N-- ) {
//        scanf("%d", &X);
//        P = Find(L, X);
//        if ( P == ERROR )
//            printf("Finding Error: %d is not in.\n", X);
//        else
//            printf("%d is at position %d.\n", X, P);
//    }
//    scanf("%d", &N);
//    while ( N-- ) {
//        scanf("%d", &P);
//        if ( Delete(L, P)==false )
//            printf(" Deletion Error.\n");
//        if ( Insert(L, 0, P)==false )
//            printf(" Insertion Error: 0 is not in.\n");
//    }
//    printArrayList(L);
//    P = 2;
//    if ( Delete(L, P)==false )
//            printf(" Deletion Error.\n");
//    printArrayList(L);
//    return 0;
//}

/* 你的代码将被嵌在这里 */

void printArrayList(List L){
    if (L == NULL || L->Last ==-1){
        return ;
    }
    int i;
    for (i = 0; i <= L->Last; i++) {
        printf("%d ",L->Data[i]);
    }
    printf("\n");
}



List MakeEmpty(){
    List p  = (List)malloc(sizeof(struct LNode));
    p->Last=-1;
    return p;
}



Position Find( List L, ElementType X ){
    if (L == NULL || L->Last ==-1){
        return ERROR;
    }
    int i;
    for (i = 0; i <= L->Last; i++) {
        if (L->Data[i] == X){
            return i;
        }
    }
    return ERROR;
}

bool Insert2( List L, ElementType X ){
    int len = L->Last+1;
    if (len == MAXSIZE){
        return false;
    }
    int i;
    for (i = 0; i < len; i++) {
        if (L->Data[i] == X){
            return false;
        }
        if (L->Data[i] < X){
            break;
        }

    }
    if (i == len){
        L->Data[i]=X;
        L->Last++;
        return true;
    } else{
        int k;
        for (k = len; k > i ; k--) {
            L->Data[k]=L->Data[k-1];
        }
        L->Data[i]=X;
        L->Last++;
        return true;
    }
}



bool Insert( List L, ElementType X, Position P ){
    int len = L->Last+1;
    if (len == MAXSIZE){
        printf("FULL");
        return false;
    }
    if (P < 0 || P > len ){
        printf("ILLEGAL POSITION");
        return false;
    }
    int i;
    for (i = len; i > P ; i--) {
        L->Data[i]=L->Data[i-1];
    }
    L->Last++;
    L->Data[i]=X;
    return true;
}

bool Delete( List L, Position P ){
    int len = L->Last;
    if (P < 0 || P > len){
        printf("POSITION %d EMPTY",P);
        return false;
    }
    int i;
    for (i = P; i <len ; i++) {
        L->Data[i] = L->Data[i+1];
    }
    L->Last--;
    return true;
}